/**
 * 
 */
package co.fitstart.coach.service;

import java.util.Date;
import java.util.List;

import co.fitstart.entity.course.CourseType;
import co.fitstart.entity.course.round.CourseRound;
import co.fitstart.entity.course.schedule.CourseSchedule;
import co.fitstart.entity.principal.Principal;
import co.fitstart.entity.site.Site;
import co.fitstart.entity.user.Student;

/**
 * @author downpour
 *
 */
public interface CourseService {
    
    /**
     * load single course schedule
     * 
     * @param id
     * @return
     */
    public CourseSchedule loadCourseSchedule(Long id);
    
    /**
     * list weekly course schedules for a coach
     * 
     * @param principal
     * @param startDate
     * @return
     */
    public List<CourseSchedule> getWeeklyCourseSchedule(Principal principal, Date startDate);
    
    /**
     * get single course schedule for a coach in a certain day hour
     * 
     * @param principal
     * @param day
     * @param hour
     * @return
     */
    public List<CourseSchedule> getCourseSchedule(Principal principal, Date day, String hour);
    
    /**
     * 
     * @param courseRoundId
     * @return
     */
    public CourseRound loadCourseRound(Long courseRoundId);
    
    /**
     * 
     * @param student
     * @param courseType
     * @return
     */
    public List<CourseRound> listCourseRound(Student student, CourseType courseType);
    
    /**
     * 
     * @param coach
     * @param site
     * @param date
     * @return
     */
    public List<String> listAvaliableTimes(Principal coach, Site site, Date date);
    
    /**
     * 
     * @param courseRound
     * @return
     */
    public int countFinishedSchedule(CourseRound courseRound);
}
